
#include <stdio.h>
#include "mpfi.h"

void harmonic(int n,mpfi_t* store){
  mpfi_t one,tmp1,tmp2;
  mpfi_set_str(*store,"[0.0,0.0]",10);
  mpfi_init_set_str(one,"[1.0,1.0]",10);
  mpfi_init(tmp1);
  mpfi_init(tmp2);
  char s[100];
  int i;
  for(i=1;i<=n;i++){
    sprintf(s, "[%d.0,%d.0]", i,i);
    mpfi_set_str(tmp1,s,10);
/*     printf("\ntmp1\n"); */
/*     mpfi_out_str(stdout,10,10,tmp1); */
    mpfi_div(tmp2,one,tmp1);
/*     printf("\ntmp2\n"); */
/*     mpfi_out_str(stdout,10,10,tmp2); */
    mpfi_add(*store,*store,tmp2);
  }
  mpfi_clear(one);
  mpfi_clear(tmp1);
  mpfi_clear(tmp2);
  return;
}


void atan_test(int n,mpfi_t* store){
  mpfi_set_str(*store,"[1.0,1.0]",10);
  int i;
  for(i=1;i<=n;i++){
    mpfi_atan(*store,*store);
  }
  return;
}

float fharmonic(int n){
  int i;
  float x = 0.0;
  for(i=1;i<n;i++)
    x = x + (1.0 / (float)i);
  return x;
}


int main(){
  int n = 1000000;
  //printf("Harmonic: %d = \n",n);
  //printf("Atan: %d = \n",n);
  //mpfi_t store;
  //mpfi_init(store);
  //harmonic(n,&store);
  //atan_test(n,&store);
  //mpfi_out_str(stdout,10,10,store);
  //mpfi_clear(store);

  mpfi_t zero;
  mpfi_init_set_str(zero,"[0.0,0.0]",10);
  mpfi_out_str(stdout,10,10,zero);
  printf("\n");
  if(mpfi_is_zero(zero))
    printf("Is Zero!!\n");
  else  
    printf("Isn't Zero!!\n");

  return 0;
}

/*
  harmonic 10^7 takes about 
    15 with hales interval package.
    53 seconds with mpfi
    85 seconds with ocaml-mpfi
 */ 

/*
int main(){
  mpfi_t t1,t2,t3,t4,t5,t6;
  mpfi_init_set_str(t1,"1.0",10);
  mpfi_init_set_str(t2,"1.5",10);
  mpfi_init_set_str(t3,"2.0",10);
  mpfi_init_set_str(t4,"2.5",10);
  mpfi_init(t5);
  mpfi_init(t6);
  mpfi_union(t5,t2,t3);
  mpfi_union(t6,t1,t4);
  if(mpfi_is_inside(t5,t6))
    printf("Yes!\n");
  else 
    printf("No!\n");
  return 0;

}
*/
